使用prisma postgresql和prisma accelerate

免费的云数据库有很多,我使用prisma官方的postgresql和它的加速功能,数据库有1G的容量,访问次数10万/月,非常够用了。

image-20260117141250034

还有很多postgresql数据库,比如neon、Supabase等等,这些数据库使用的时候,如果项目代码中使用了prisma,注意要结合prisma accelerate一起使用,速度会更快。

model改变之后报错

model里面,我将model Words 改为 model Word之后,使用this.prisma.word会报错。

解决办法,将generated文件夹删除掉,然后运行npx prisma generate重新生成。然后把vscode重启,就好了。

这就给出了一个通用的解决办法,就是model里面无论改变了什么,都使用上面的方法来解决。

generated/prisma/client.ts文件里面引入的文件都是.js的文件

在prisma 7中,Prisma Client 现在默认生成 ES 模块 (ESM) 代码。即使生成的源文件后缀是 .ts,为了遵循 Node.js 的 ESM 规范,它内部的 import 路径必须显式包含 .js 后缀。

这在 NestJS(通常使用 Webpack 或 CommonJS)中会造成路径无法解析的错误。

现象是:在client.ts文件中,引入了internal文件夹里面的一些文件,这些文件都是 .ts 后缀。但是引入的代码,写的却是.js后缀,那么在引用client的时候,就会报错。

解决办法:

Prisma 允许你配置生成文件的后缀和导入后缀。将以下配置添加到你的 generator client 块中:

添加后,重新运行 npx prisma generate。这样生成的代码中,所有的 import ... from './internal/xxx.js' 都会变成 ./internal/xxx.ts

参考:https://www.youtube.com/watch?v=XHYAYe-nmxg&t=51s

如果还是解决不了,那要么使用prisma v6,要么升级到最新的prisma版本,看他们修复了没有。

多个query参数怎么写where条件?

在列表查询中,除了page和limit这两个参数之外,还有很多搜索相关的参数,这些参数传递过来的时候,应该怎么写where条件呢?

在使用 Prisma 进行列表查询时,当有大量可选的搜索/过滤参数时,最推荐的做法是:

  1. 先在前端/接口层把所有可能的查询参数收集到一个对象中
  2. 在后端编写一个干净、可维护的 where 条件构建函数
  3. 根据传入参数动态构建 where 对象

推荐的写法示例

假设我们有一个用户列表查询接口,支持以下搜索/过滤条件:

后端代码示例(TypeScript + Prisma)

那么假设所有搜索条件都加上了,最终的where会是什么样的呢?

总结一下:

先将where定义成空对象{},然后如果是模糊搜索(在同一个输入框中,可以输入邮箱或者用户名或者userId来搜索),就使用where.OR = [{字段名: {contains: params.search, mode: 'insensitive'}}, ...更多字段名]来处理;如果是精确搜索,那么使用where.xxx = params.xxx加上去即可。